package com.axin.common.utils;

import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

public class EMailUtil {

    static String AFFIX = ""; // 附件地址
    static String AFFIXNAME = ""; // 附件名称

    /**
     * 
     * 发送邮件
     * @Title: send   
     * @author: Axin
     * @param host smtp服务器
     * @param fromAdd 发件人地址
     * @param username 发件人用户名
     * @param password 163邮箱授权码
     * @param subject 邮件主题
     * @param context 邮件内容
     * @param toAdds 收件地址 地址1，地址2，地址3
     * @throws
     */
    public static void send(String host, String fromAdd, String username, String password, String subject, String context,String toAdds) {
        Properties props = new Properties();
        //设置发送邮件的邮件服务器的属性（这里使用网易的smtp服务器）
        props.put("mail.smtp.host", host);
        //需要经过授权，也就是有户名和密码的校验，这样才能通过验证（一定要有这一条）
        props.put("mail.smtp.auth", "true");
        //用props对象构建一个session
        Session session = Session.getDefaultInstance(props);
        session.setDebug(false);
        
        //用session为参数定义消息对象
        MimeMessage message = new MimeMessage(session);
        try {
        	//加载发件人地址
            message.setFrom(new InternetAddress(fromAdd));
            //加载收件人地址
            String[] TOS = toAdds.split(",");
            InternetAddress[] sendTo = new InternetAddress[TOS.length]; 
            for (int i = 0; i < TOS.length; i++) {  
                sendTo[i] = new InternetAddress(TOS[i]);  
            }
            message.addRecipients(Message.RecipientType.TO,sendTo);
            //设置在发送给收信人之前给自己（发送方）抄送一份，不然会被当成垃圾邮件，报554错
            message.addRecipients(MimeMessage.RecipientType.CC, InternetAddress.parse(fromAdd));
            //加载标题
            message.setSubject(subject);
            //向multipart对象中添加邮件的各个部分内容，包括文本内容和附件
            Multipart multipart = new MimeMultipart();
            //设置邮件的文本内容
            BodyPart contentPart = new MimeBodyPart();
            contentPart.setText(context);
            multipart.addBodyPart(contentPart);
            if(!AFFIX.isEmpty()){//添加附件
                 BodyPart messageBodyPart = new MimeBodyPart();
                 DataSource source = new FileDataSource(AFFIX);
                 //添加附件的内容
                 messageBodyPart.setDataHandler(new DataHandler(source));
                 //添加附件的标题
                 sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();
                 messageBodyPart.setFileName("=?GBK?B?"+ enc.encode(AFFIXNAME.getBytes()) + "?=");
                 multipart.addBodyPart(messageBodyPart);
            }
            //将multipart对象放到message中
            message.setContent(multipart);
            //保存邮件
            message.saveChanges(); 
            Transport transport = session.getTransport("smtp");
            //连接服务器的邮箱
            transport.connect(host, username, password);
            //发送
            transport.sendMessage(message, message.getAllRecipients());
            //关闭连接
            transport.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
}